Compartilhar via


Classe System.Collections.Generic.HashSet<T>

Este artigo fornece comentários complementares à documentação de referência para esta API.

A HashSet<T> classe fornece operações de conjunto de alto desempenho. Um conjunto é uma coleção que não contém elementos duplicados e cujos elementos não estão em nenhuma ordem específica.

A capacidade de um HashSet<T> objeto é o número de elementos que o objeto pode conter. A capacidade de um HashSet<T> objeto aumenta automaticamente à medida que os elementos são adicionados ao objeto.

A classe HashSet<T> se baseia no modelo de conjuntos matemáticos e fornece operações de conjunto de alto desempenho semelhantes ao acesso às chaves das coleções Dictionary<TKey,TValue> ou Hashtable. Em termos simples, a HashSet<T> classe pode ser considerada como uma Dictionary<TKey,TValue> coleção sem valores.

Uma HashSet<T> coleção não é classificada e não pode conter elementos duplicados. Se a duplicação de ordem ou elemento for mais importante do que o desempenho do aplicativo, considere usar a List<T> classe junto com o Sort método.

HashSet<T> fornece muitas operações de conjuntos matemáticos, como adição de conjuntos (uniões) e subtração de conjuntos. A tabela a seguir lista as operações fornecidas HashSet<T> e seus equivalentes matemáticos.

Operação HashSet Equivalente matemático
UnionWith União ou adição definida
IntersectWith Cruzamento
ExceptWith Definir subtração
SymmetricExceptWith Diferença simétrica

Além das operações de conjunto listadas, a HashSet<T> classe também fornece métodos para determinar a igualdade de conjuntos, a sobreposição de conjuntos e se um conjunto é um subconjunto ou um superconjunto de outro conjunto.

Somente .NET Framework: Para objetos muito grandes HashSet<T>, você pode aumentar a capacidade máxima para 2 bilhões de elementos em um sistema de 64 bits, definindo o atributo enabled do elemento de configuração <gcAllowVeryLargeObjects> para true no ambiente de execução.

A classe HashSet<T> implementa a interface ISet<T>.

Operações de conjunto com HashSet e LINQ

O LINQ fornece acesso às operações de conjunto Distinct, Union, Intersect e Except em qualquer fonte de dados que implemente as interfaces IEnumerable ou IQueryable. HashSet<T> fornece uma coleção maior e mais robusta de operações de conjunto. Por exemplo, HashSet<T> fornece comparações como IsSubsetOf e IsSupersetOf.

A principal diferença entre operações de conjunto LINQ e HashSet<T> operações é que as operações de conjunto LINQ sempre retornam uma nova IEnumerable<T> coleção, enquanto os HashSet<T> métodos equivalentes modificam a coleção atual.

Normalmente, se você precisar criar um novo conjunto ou se seu aplicativo precisar de acesso apenas às operações de conjunto fornecidas, o uso de operações de conjunto LINQ em qualquer IEnumerable<T> coleção ou matriz será suficiente. No entanto, se o aplicativo exigir acesso a operações de conjunto adicionais ou se não for desejável ou necessário criar uma nova coleção, use a HashSet<T> classe.

A tabela a seguir mostra as operações HashSet<T> e suas operações de conjunto LINQ equivalentes.

Operação HashSet Equivalente a LINQ
UnionWith Union
IntersectWith Intersect
ExceptWith Except
Não fornecido. Distinct
SymmetricExceptWith Não fornecido.
Overlaps Não fornecido.
IsSubsetOf Não fornecido.
IsProperSubsetOf Não fornecido.
IsSupersetOf Não fornecido.
IsProperSupersetOf Não fornecido.
SetEquals Não fornecido.